请问 int (*a[2])[5]是什么意思

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:40:57
我知道 int* a[2][5]是表示 一个2×5的指针矩阵,那么int (*a[2])[5]这个怎么去理解呢?

a是一个有两个元素的数组,
这个数组的元素是指针
指针类型是int[5]

看的时候从声明符a向外按结合性和优先级来看
int (*a[2])[5]中a先和[2]结合,所以是数组
再和*结合说明数组元素是指针
再和[5]结合说明指针指向一个有五个元素的数组
int说明该复合类型的基类型,即五个int元素的数组

如果没有括号,即:int *a[2][5]
那a先和[2]结合是两个元素的数组
再和[5]结合说明数组元素是五个元素的数组
再和*结合说明数组元素(五个元素的数组)的元素是指针
再结合类型符int

实际上C/C++内部没有多维数组,在上例中a是数组,只不过它的元素还是数组。记住这点对理解数组与指针有好处。

可以用个例子来理解:
int array[5]; //array是 int[5]类型
int (*p1)[5] = &array; //p1是个int[5]的指针, &array是int[5]指针
int (*a[2])[5] = {(int (*)[5])0}; //a的第一个元素(一个int (*)[5])初始化为0
a[0] = p1; //a的第一个元素(一个int (*)[5])指向p1所指的int[5]

理解了这段,就可以说对c的复杂申明理解的不错了

要加深对数组与指针的理解,参看:
http://zhidao.baidu.com/question/112048459.html
yyrryyrr2的回答

yyrryyrr2 的回答 我非常赞同 我顶你 我感觉你是一个老师。